#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
const double pi=acos(-1.0);
typedef struct
{
    int x;
    int y;
}point;
point p[1010];
vector<point> res;
int n,l;
double dis(point a,point b)
{
    return sqrt((double)(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int muilt(point be,point e1,point e2)
{
    return (e1.x-be.x)*(e2.y-be.y)-(e2.x-be.x)*(e1.y-be.y);
}
bool cmp(point a,point b)
{
    if(muilt(p[0],a,b)>0) return true;
    else if(muilt(p[0],a,b)==0&&dis(p[0],a)>dis(p[0],b)) return true;
    else return false;
}
void graham()
{
    int pos,i,j;
    for(pos=0,i=0;i<n;i++)
    {
        if(p[i].y<p[pos].y||(p[i].y==p[pos].y&&p[i].x<p[pos].x))
        {
            pos=i;
        }
    }
    swap(p[pos],p[0]);
    sort(p+1,p+n,cmp);
    res.push_back(p[0]);
    res.push_back(p[1]);
    res.push_back(p[2]);
    for(i=3;i<n;)
    {
        if(muilt(res.back(),p[i],res[res.size()-2])>=0)
        {
            res.push_back(p[i]);
            i++;
        }
        else
        {
            res.pop_back();
        }
    }
}
int main()
{
    int i,j;
    double sum=0;
    cin>>n>>l;
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&p[i].x,&p[i].y);
    }
    graham();
    sum+=dis(res[0],res.back());
    for(i=0;i<res.size()-1;i++)
    {
        sum+=dis(res[i],res[i+1]);
    }
    sum+=pi*l*2;
    if(sum-(int)sum>=0.5) sum+=1;
    cout<<(int)sum<<endl;
    return 0;
}
